import { Message, MessageBox } from 'element-ui';
import env from '../../env.js';


/**
    * 查询方法数据修饰
    * @param {传入的输入框，value是变量，name是搜索项} list 
    * @param {传入后台的变量值名称，与后台对应} vmodel 
    */
function seach(list = [], vmodel = []) {
  const formData = {};
  list.forEach((item, i) => {
    formData[vmodel[i]] = item.value;
  });
  return formData;
}
/**
 * 上传数据
 * @param {传入的存在多数组的对象} list 
 * @param {传入后台的变量值名称，与后台对应} vmodel 
 * @returns 
 */

function Submit(list = {}, vmodel = [],) {
  let otherlist = []
  const formData = {};
  const newsobj = {}

  for (let prop in list) {
    list[prop].forEach((item, i) => {
      if (item.type == 'upload' && !item.arr) {
        // console.log(item)
        let imglist = []
        item.imglist.forEach((item, index) => {
          // 判断是否是编辑
          let path
          if (item.response) {
            path = item.response.data.url
          } else {
            const url = new URL(item.url);
            path = url.pathname;
          }
          imglist.push(path)
        });
        formData[prop + i] = imglist.join(',');
      }
      if (['input', 'select', 'time', 'text', 'number'].indexOf(item.type) != -1 && !item.arr) {
        formData[prop + i] = item.value;
      }


      //特殊情况单独处理
      if (item.arr == true && item.arr) {
        // console.log(JSON.stringify(item),i,prop)
        otherlist.push(JSON.parse(JSON.stringify(item)))
      }

    });
  }
  // console.log(JSON.stringify(otherlist))

  //在这转换为后台需要的格式
  //=========================================================================================
  // //特殊情况单独处理
  // let other = []

  // let othernum = otherlist.length / 2

  // for (let y = 0; y < othernum; y++) {
  //   let otherobj = {
  //     name: '',
  //     code: ''
  //   }
  //   otherobj.name = otherlist[2 * y].value
  //   otherobj.code = otherlist[2 * (y + 1) - 1].value
  //   other.push(otherobj)
  // }
  // // console.log(other)
  //==================================================================================================


  // console.log(formData, Object.entries(formData))
  let num = 0
  for (const [key, value] of Object.entries(formData)) {
    if (vmodel.length == 0) {
      return newsobj
    }
    newsobj[vmodel[num]] = value;
    // if (num == vmodel.length - 1) {
    //   return newsobj
    // }
    num++
  }
  //  console.log(newsobj)
  // if (other && other.length > 0) {
  //   newsobj['other'] = other
  // }
  return newsobj

}
/**
 * 转换后台返回的数据格式，用于页面回显
 * Object.values 对像转数组
 * Object.entries 转换为一个键值对数组
 * @param {当前页面回显的数据格式} list 
 * @param {后台返回的数据} FormData 
 * @param {传入后台的变量值名称，与后台对应} vmodel 
 * @param {之前提交当前返回数据的数据（用来调整顺序）} subobj 
 */
function getdata(list = {}, FormData = {}, vmodel = []) {
  // console.log(list,FormData,vmodel)

  //拿到之前提交给后台的数据
  let subobj = Submit(list, vmodel)

  let arr = JSON.parse(JSON.stringify(Object.entries(subobj)))
  let arr_2 = JSON.parse(JSON.stringify(Object.entries(FormData)))

  // arr是正确的顺序，但是特殊情况顺序会不对（人员信息的证书）
  // console.log(arr,arr_2)
  // console.log(subobj)

  //==================================================================================================
  // //特殊情况，单独处理（此处修正）
  // let other = []
  // for (const [key, value] of arr) {
  //   // console.log(key, value)
  //   if (key == 'other') {
  //     other = arr[28]
  //     arr.splice(28, 1);
  //     arr.splice(22, 0, other);
  //   }

  // }
  // // console.log(arr,'修改后')

  // let object = {} //存放修正的数据
  // for (const [key, value] of arr) {
  //   // console.log(key, '==', value)
  //   for (const [key1, value1] of arr_2) {
  //     if (key == key1) {
  //       object[key] = FormData[key1]
  //     }
  //   }
  // }
  // // object正确的顺序
  // // console.log(JSON.stringify(object))
  //==================================================================================================
  for (const [key, value] of arr) {
    // console.log(key, '==', value)
    for (const [key1, value1] of arr_2) {
      if (key == key1) {
        subobj[key] = FormData[key1]
      }
    }
  }
  // console.log(Object.values(subobj),Object.values(object))
  //给页面数据赋值，转换为页面需要的格式
  let num = 0
  // console.log(list)
  for (let prop in list) {
    list[prop].forEach((item, i) => {
      if (item.type == 'upload') {
        // console.log(Object.values(subobj)[num])
        // if(item.imglist && item.imglist.length > 0){
        //   let newimglist = Object.values(subobj)[num].split(",")
        //   for (let b = 0; b < newimglist.length; b++) {
        //     newimglist[b] = imgurl(newimglist[b]);
        //   }
        //   item.imglist = showimg(newimglist)
        // }else{
        //   item.imglist = [ ]
        // }

        if (Object.values(subobj)[num]) {
          let newimglist = Object.values(subobj)[num].split(",")
          for (let b = 0; b < newimglist.length; b++) {
            newimglist[b] = imgurl(newimglist[b]);
          }
          item.imglist = showimg(newimglist)
        } else {
          item.imglist = []
        }


      }

      if (['input', 'select', 'time', 'text', 'number'].indexOf(item.type) != -1) {
        item.value = Object.values(subobj)[num];
      }
      // item.type == 'span' ? num : num++
      num++
    })

  }

  // console.log(num)

  // console.log(list)
  //==================================================================================================


  return list
}
/**
 * 
 * @param {图片路径} url 
 * @returns 
 */
function imgurl(url) {
  let Gurl = env.API_BASE_URL

  return Gurl + url
}
/**
 * 
 * @param {图片地址数组} urllist 
 * @returns 
 */
function imglisturl(urllist) {
  let Gurl = env.API_BASE_URL
  let arr = []
  for (let i = 0; i < urllist.length; i++) {
    arr[i] = Gurl + urllist[i]
  }
  return arr
}
/**
 * 进一步转换后台传的地址数据，用户upload回显
 * @param {文件地址} e 
 * @returns 
 */
function showimg(e,value_name) {
  e = JSON.parse(JSON.stringify(e))
  let value_namearr = ''
  if(value_name){
    value_namearr = JSON.parse(JSON.stringify(value_name))
  }
  // console.log(e,'传的数据',value_namearr)
  let list = [];
  for (let b = 0; b < e.length; b++) {
    // console.log(e[b],'每一条')
    let obj = {};
    obj['url'] = e[b];
    obj['name'] = value_namearr[b];
    // console.log(obj,'格式')

    list.push(obj);
  }
  // console.log(list, '修改的')
  return list
}

/**
 * 信息提示
 * @param {传入的后台返回值} e 
 * @param {提示的类型,1、默认，2、自定义，3、失败自定义，4、成功自定义} type 
 * @returns 
 */
function ts(e, type = 1, cancelText) {
  // console.log(e, type)
  return new Promise((resolve, reject) => {

    if (type == 1) {
      if (e.code == 1) {
        Message({
          message: e.msg,
          type: 'success'
        })
        resolve('1')
      } else {
        Message({
          message: e.msg,
          type: 'error'
        })
        reject('2')
      }

    }
    if (type == 2) {
      MessageBox.confirm(
        '<div class="nr">' + e.msg + '</div>',
        '温馨提示', {
        dangerouslyUseHTMLString: true,
        closeOnClickModal: false,
        closeOnPressEscape: false,
        confirmButtonText: '确定',
        cancelButtonText: cancelText ? cancelText : '取消',
      }).then((res) => {
        if (e.code == 1) {
          resolve('成功')
        } else {
          reject('失败')
        }

      }).catch((err) => {

        reject(err)

      })
    }
    if (type == 3) {
      if (e.code == 1) {
        Message({
          message: e.msg,
          type: 'success'
        })
        resolve('1')
      } else {
        MessageBox.confirm(
          '<div class="nr">' + e.msg + '</div>',
          '温馨提示', {
          dangerouslyUseHTMLString: true,
          closeOnClickModal: false,
          closeOnPressEscape: false,
          confirmButtonText: '确定',
          cancelButtonText: '取消',
        }).then((res) => {
          if (e.code == 1) {
            resolve()
          } else {
            reject()
          }
        }).catch((err) => {

          reject(err)

        })
      }
    }
    if (type == 4) {
      if (e.code == 1) {
        MessageBox.confirm(
          '<div class="nr">' + e.msg + '</div>',
          '温馨提示', {
          dangerouslyUseHTMLString: true,
          closeOnClickModal: false,
          closeOnPressEscape: false,
          confirmButtonText: '确定',
          cancelButtonText: '取消',
        }).then((res) => {

          if (e.code == 1) {
            resolve()
          } else {
            reject()
          }
        }).catch((err) => {

          reject(err)

        })

      } else {
        Message({
          message: e.msg,
          type: 'success'
        })
        resolve('1')
      }
    }


  });

}
/**
 * 判断是否为空
 * @param {判断的对象} obj 
 * @returns 
 */
function pdobj(obj) {
  if (typeof obj === "undefined" || obj === null || Object.keys(obj).length === 0) {
    return true //为空
  } else {
    return false

  }
}
/**
 * 递归树状结构查询
 * @param {树形结构每一项} tree 
 * @param {要查的值} target 
 * @returns 
 */
function findValue(item, target) {
  // console.log(item, "====")
  if (item.path === target) {
    return item;
  }
  if (item.children && item.children.length > 0) {
    for (let i = 0; i < item.children.length; i++) {
      let result = findValue(item.children[i], target);
      if (result) {
        return result;
      }
    }
  }
  return null;
}
/**
 * 路由查询，判断当前的token是机构还是个人的
 * @param {路由表} list 
 * @param {页面路由} value 
 * @returns 
 */
function findlist(list, value) {
  let data = []
  list.forEach((item, index) => {
    // console.log(findValue(item, value))
    data.push(findValue(item, value))
  })
  let result = data.filter((element) => {
    return element !== null;
  });
  console.log(result)
  return result
}
/**
 * 二级树形结构查询,二级的，用于路由跳转高亮
 * @param {要查询的树形结构} tree
 * @param {要查询的值} value
 */

function findNodeById(tree, value) {
  let data = null;
  tree.forEach((item, index) => {
    if (item.subroutername === value) {
      data = item.subroutername;
      return
    }
    // // 处理当前节点的子节点
    if (item.menulist && item.menulist.length > 0) {
      item.menulist.forEach((element, index) => {
        if (element.subroutername === value) {
          data = element.subroutername;
          return
        }
      });
    }
  });
  if (data == null) {
    tree.forEach((item, index) => {
      if (item.menulist && item.menulist.length > 0) {
        item.menulist.forEach((element, index) => {
          if (
            element.list &&
            element.list.length > 0 &&
            element.list.indexOf(value) != -1
          ) {
            data = element.subroutername;
          }
        });
      }
    });
  }
  return data;
}



// 获取文件的扩展名
function getFileExtension(filename) {
  return filename.slice((filename.lastIndexOf(".") - 1 >>> 0) + 2);
}

// 判断文件是否为图片
function isImageFile(filename) {
  const extensions = ["jpg", "jpeg", "png", "gif"];
  const ext = getFileExtension(filename).toLowerCase();
  return extensions.includes(ext);
}

// 判断文件是否为PDF
function isPdfFile(filename) {
  const extensions = ["pdf"];
  const ext = getFileExtension(filename).toLowerCase();
  return extensions.includes(ext);
}

function pdimg(fileName) {
  // 示例用法
  // const fileName = "example.jpg";
  if (isImageFile(fileName)) {
    console.log("这是一张图片");
    return 'img'
  } else if (isPdfFile(fileName)) {
    console.log("这是一个PDF文件");
    return 'pdf'
  } else {
    console.log("未知文件类型");
    return false
  }
}
export default { seach, Submit, getdata, imgurl, imglisturl, showimg, ts, pdobj, findNodeById, findValue, findlist, pdimg }